using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HerGoS.Interfaces;
using HerGoS.Administration.Entities.Interfaces;

namespace HerGoS.Administration.Entities
{
    [Serializable]
    public class Persona : HGSEntity, IContactos, IDomicilios, ICuentasBancarias,IPais,IContratos
	{
		#region Construction
		public Persona()
		{
            Initializer();
		}
        private void Initializer()
        {
            TiposProfesion = new List<TipoProfesion>();
            Contactos = new List<Entities.Contacto>();
            Domicilios = new List<Entities.Domicilio>();
            Documentos = new List<Entities.Documento>();
            CuentasBancarias = new List<CuentaBancaria>();
            Contratos = new List<Contrato>();
        }

		#endregion

		#region DataMembers
		private String _Apellidos;
		private String _Nombres;
		private String _Cuit;
        private String _DNI;
		private CondicionAfip _CondicionAfip;
		private Boolean _Sexo;
		private DateTime? _FechaNacimiento;
		private EstadoCivil _EstadoCivil;
        private Pais _Nacionalidad;
		private String _Observaciones;
		

		private String _Horario;
		private DateTime? _FechaInicio;
		private DateTime? _FechaFin;

        private int _EntidadId;
        private Area _AreaId;
        private Puesto _perPUESTO; 

        private Cobro _Cobro;
        private List<TipoProfesion> _TiposProfesion;
        private List<Contacto> _Contactos;
        private List<Domicilio> _Domicilios;
        private List<Documento> _Documentos;
        private List<CuentaBancaria> _CuentasBancarias;
        private List<Contrato> _Contratos;
		#endregion

		#region Properties


        public int idPais {get;set;}
        public int idEstadoCivil { get; set; }
        public String Apellidos
        {
		    get { return _Apellidos; }
		    set { this._Apellidos = value; }
		}

        public String Nombres
        {
		    get { return _Nombres; }
		    set { this._Nombres = value; }
		}

        public String NombresYApellidos
        {
            get { return String.Format("{0}, {1}", _Apellidos, _Nombres); }
        }


        public String Cuit
        {
		    get { return _Cuit; }
		    set { this._Cuit = value; }
		}

        public String DNI
        {
            get { return this._DNI; }
            set { this._DNI = value; }
        }

        public CondicionAfip CondicionAfip
        {
		    get { return _CondicionAfip; }
		    set { this._CondicionAfip = value; }
		}

        public Boolean Sexo
        {
		    get { return _Sexo; }
		    set { this._Sexo = value; }
		}

        public DateTime? FechaNacimiento
        {
		    get { return _FechaNacimiento; }
		    set { this._FechaNacimiento = value; }
		}

        public EstadoCivil EstadoCivil
        {
		    get { return _EstadoCivil; }
		    set { this._EstadoCivil = value; }
		}

		public Pais Nacionalidad {
            get { return _Nacionalidad; }
            set { this._Nacionalidad = value; }

            
		}

        public String Observaciones
        {
		    get { return _Observaciones; }
		    set { this._Observaciones = value; }
		}

		public Puesto perPUESTO {
		    get { return _perPUESTO; }
		    set { this._perPUESTO = value; }
		}

        public String Horario
        {
		    get { return _Horario; }
		    set { this._Horario = value; }
		}

        public DateTime? FechaInicio
        {
		    get { return _FechaInicio; }
		    set { this._FechaInicio = value; }
		}

        public DateTime? FechaFin
        {
		    get { return _FechaFin; }
		    set { this._FechaFin = value; }
		}

        public Cobro Cobro
        {
            get { return _Cobro; }
            set { this._Cobro = value; }
        }

        public int Entidad
        {
            get { return this._EntidadId; }
            set { _EntidadId = value; }


        }

        public Area Area
        {
            get { return this._AreaId; }
            set { _AreaId = value; }

        
        }

        public List<TipoProfesion> TiposProfesion
        {
            get { return _TiposProfesion; }
            set { this._TiposProfesion = value; }
        }




        /// <summary>
        /// Lista de conectados
        /// </summary>
        public List<Contacto> Contactos
        {
            get { return _Contactos; }
            set { this._Contactos = value; }
        }
        /// <summary>
        /// Devuelvo el Contacto principal
        /// </summary>
        public Contacto ContactoPrincipal
        {
            get { return this.Contactos.Find(c => c.Principal == true); }
        }

        public List<Domicilio> Domicilios
        {
            get { return _Domicilios; }
            set { this._Domicilios = value; }
        }
        /// <summary>
        /// Devuelvo el Domicilio principal
        /// </summary>
        public Domicilio DomicilioPrincipal
        {
            get { return this.Domicilios.Find(d => d.Principal == true); }
        }

        public List<Documento> Documentos
        {
            get { return _Documentos; }
            set { this._Documentos = value; }
        }
        /// <summary>
        /// Devuelvo el Documento principal
        /// </summary>
        public Documento DocumentoPrincipal
        {
            get { return this.Documentos.Find(d => d.Principal == true); }
        }

        public List<CuentaBancaria> CuentasBancarias
        {
            get { return _CuentasBancarias; }
            set { this._CuentasBancarias = value; }
        }
        /// <summary>
        /// Devuelvo la CuentaBancaria principal
        /// </summary>
        public CuentaBancaria CuentaBancariaPrincipal
        {
            get { return this.CuentasBancarias.Find(c => c.Principal == true); }
        }

        #endregion
        #region IContratos Members


        public List<Contrato> Contratos
        {
            get { return _Contratos;     }
            set{  this._Contratos = value;}
             
        }

        #endregion

		
		
		#region Overrides
		/// <summary>
		/// Returns the string of the object.
		/// </summary>
		/// <returns>String</returns>
		public override String ToString()
		{
            return String.Format("{0}, {1}", this.Apellidos, this.Nombres);
		}

		#endregion
        

      
    }
}